# -*- coding: utf-8 -*-
"""
:mod:`nubox.long`
=================

Provides the ``NuBox`` hierarchy of sub-classes to store integer numbers as 
``longs``. 

"""
from __future__ import (division, with_statement, absolute_import, generators,
                         nested_scopes)

from .core import NuBoxScalar, NuBoxVector, NuBoxArray, NuBoxCube
from .const import INT_DUMMY


class Long(NuBoxScalar):
    """
    A scalar ``NuBox`` to hold an integer number as ``long``.
    
    """
    clsdummy = INT_DUMMY


class LongVector(Long, NuBoxVector):
    """
    A vector of ``Longs``.
    
    """
    clschild = Long


class LongArray(LongVector, NuBoxArray):
    """
    An array of ``Longs`` (vector of ``LongVectors``).
    
    """
    clschild = LongVector


class LongCube(LongArray, NuBoxCube):
    """
    A cube of ``Longs`` (vector of ``LongArrays``).
    
    """
    clschild = LongArray


Long.clsparent = LongVector
LongVector.clsparent = LongArray
LongArray.clsparent = LongCube

del NuBoxScalar, NuBoxVector, NuBoxArray, NuBoxCube
